import { Type } from 'class-transformer';
import {
  IsNotEmpty,
  MinLength,
  MaxLength,
  IsOptional,
  IsPositive,
  IsPhoneNumber,
  IsEmail,
  IsNumberString,
  IsEnum,
  IsDate,
  IsIP,
} from 'class-validator';
import { GenderType } from 'src/common/type/gender.type';
import { CustomerLevelType } from '../type/customer.level.type';

// 新增验证
export class CustomerInsertDto {
  // 名称
  @IsOptional()
  @Type(() => String)
  @IsNotEmpty({ message: '用户名不能为空' })
  @MaxLength(255, { message: '用户名长度最长为 $constraint1' })
  name: string;

  // 手机
  @IsOptional()
  @Type(() => String)
  @IsNotEmpty({ message: '手机不能为空' })
  @IsPhoneNumber('CH', { message: '不是有效的手机' })
  phone: string;

  // 邮箱
  @IsOptional()
  @Type(() => String)
  @IsNotEmpty({ message: '邮箱不能为空' })
  @IsEmail()
  email: string;

  // 微信
  @Type(() => String)
  @IsNotEmpty({ message: '微信不能为空' })
  wechat: string;

  // 抖音
  @IsOptional()
  @Type(() => String)
  @IsNotEmpty({ message: '抖音不能为空' })
  douyin: string;

  // 快手
  @IsOptional()
  @Type(() => String)
  @IsNotEmpty({ message: '快手不能为空' })
  kuaishou: string;

  // 年龄
  @IsOptional()
  @Type(() => Number)
  @IsNotEmpty({ message: '年龄不能为空' })
  @IsPositive({ message: '年龄需要为正整数' })
  age: number;

  // 性别
  @IsOptional()
  @Type(() => Number)
  @IsNotEmpty({ message: '性别不能为空' })
  @IsEnum(GenderType)
  gender: number;

  // 区域id
  @IsOptional()
  @Type(() => String)
  @IsNumberString()
  area: string;

  // 地址
  @IsOptional()
  @Type(() => String)
  @IsNotEmpty({ message: '地址不能为空' })
  address: string;

  // 用户等级
  @IsOptional()
  @Type(() => Number)
  @IsEnum(CustomerLevelType)
  level: number;

  // 首次联系的时间
  @IsOptional()
  @IsDate({ message: '第一次联系时间应为日期类型' })
  first_contact_time: Date;

  // 首次联系的ip
  @IsOptional()
  @Type(() => String)
  @IsIP()
  first_contact_ip: string;

  // 最后一次联系的时间
  @IsOptional()
  @IsDate({ message: '最后一次联系的时间应为日期类型' })
  last_contact_time: Date;

  // 最后一次联系的ip
  @IsOptional()
  @Type(() => String)
  @IsIP()
  last_contact_ip: string;

  // 创建时间
  @IsOptional()
  @IsDate({ message: '创建时间应为日期类型' })
  create_time: Date;

  // 描述
  @IsOptional()
  @Type(() => String)
  @MinLength(1, { message: '描述长度最少为 $constraint1 ,但实际为 $value' })
  @MaxLength(255, { message: '描述长度最长为 $constraint1' })
  description: string;

  // 员工id
  @Type(() => Number)
  @IsNotEmpty({ message: '年龄不能为空' })
  @IsPositive({ message: '年龄需要为正整数' })
  employee_id: number;
}
